/*
 * @Date: 2023-01-22 02:17:37
 * @LastEditors: 恶名扬 2080156129@qq.com
 * @LastEditTime: 2023-01-24 05:20:50
 * @FilePath: \campus-repair-platform\server\service\reception\user.js
 */
/**
 * login    登录
 * getCode  获取验证码
 * updatePwdPhone  修改密码(找回密码)
 */

const { userStatement, getCode, updatePwdPhone } = require("../common/user")
// 导入密码加密
const bcrypt = require("bcryptjs")
// 用这个包来生成 Token 字符串
const jwt = require("jsonwebtoken")
// 导入全局的配置文件
const config = require("../../config")

exports.login = async (req, res) => {
  try {
    const { password, account } = req.body
    // 判断用户类型
    let type = account.indexOf("gl") > -1 ? 3 : account.indexOf("wx") > -1 ? 2 : 1

    // 获取用户信息
    let results = await RunSQL(userStatement(type).select(type === 1 ? { s_number: account } : { job_number: account }, "password"))
    if (results.length !== 1) return res.successSend("账号不存在！", 10005) // 执行语句成功，但获取到的数据条数非 1
    if (results[0].state === 1) return res.successSend("账号已冻结，请联系管理员！", 10005)
    if (!bcrypt.compareSync(password, results[0].password)) return res.successSend("密码错误！", 10005)
    if (type === 3 && results[0].permission) type = 4

    // 对用户的信息进行加密 生成 TOKEN 字符串
    const token = jwt.sign({ ...results[0], password: "", type },
      config.jwtSecretKey, { expiresIn: config.expiresIn })

    // redisClient.sadd(results[0].id, 'login', (err) =>{
    //   if (err) return res.errSend(err)
      // 将生成的 token 字符串响应给客户端
      return res.successSend("登录成功！", 10000, { token, type })
    // })
  } catch (error) {
    res.errSend(error)
  }
}

exports.getCode = (req, res) => {
  return getCode(res, req.body)
}

exports.updatePwdPhone = (req, res) => {
  return updatePwdPhone(res, req.body)
}
